package com.zeny.express.framework.shared.util;

/**
 * 二进制常用方法
 * 
 * @author zhuwei
 * @date 2013年9月4日 下午2:55:37
 */
public class ByteUtils {

	/**
	 * 整形转二进制
	 * 
	 * @author zhuwei
	 * @date 2013年9月4日 下午2:55:58
	 * @param value
	 * @return
	 */
	public static byte[] int2byte(int value) {
		byte[] data = new byte[4];

		data[0] = (byte) (value & 0xff);// 最低位
		data[1] = (byte) ((value >> 8) & 0xff);// 次低位
		data[2] = (byte) ((value >> 16) & 0xff);// 次高位
		data[3] = (byte) (value >>> 24);// 最高位,无符号右移。
		return data;
	}

	/**
	 * 二进制转整形
	 * 
	 * @author zhuwei
	 * @date 2013年9月4日 下午2:56:08
	 * @param value
	 * @return
	 */
	public static int byte2int(byte[] value) {
		// 一个byte数据左移24位变成0x??000000，再右移8位变成0x00??0000

		int data = (value[0] & 0xff) | ((value[1] << 8) & 0xff00) // | 表示安位或
				| ((value[2] << 24) >>> 8) | (value[3] << 24);
		return data;
	}

	/**
	 * 拼接二进制
	 * 
	 * @author zhuwei
	 * @date 2013年9月4日 下午2:56:18
	 * @param arrays
	 * @return
	 */
	public static byte[] concat(byte[]... arrays) {
		// Determine the length of the result array
		int totalLength = 0;
		for (int i = 0; i < arrays.length; i++) {
			totalLength += arrays[i].length;
		}

		// create the result array
		byte[] result = new byte[totalLength];

		// copy the source arrays into the result array
		int currentIndex = 0;
		for (int i = 0; i < arrays.length; i++) {
			System.arraycopy(arrays[i], 0, result, currentIndex,
					arrays[i].length);
			currentIndex += arrays[i].length;
		}

		return result;
	}

}
